package src.main.zerenlian;


/**
 * 领导抽象类 每一个具体领导实现类都应继承该类
 */
abstract class Handler {
    // 私有下一级管理者
    protected Handler nextHandler;

    // 设置下一级管理者
    public void setNextHandler(Handler nextHandler){
        this.nextHandler = nextHandler;
    }

    // 处理方法
    abstract void approve(int info);
}


/**
 * 实施类1
 */
class Implement1 extends Handler {
    // 实施类1 处理方法
    @Override
    void approve(int info) {
        if (info < 10) {
            System.out.println("Implement1：实施中。。。"+info);
            return;
        }
        nextHandler.approve(info);
    }
}



/**
 * 实施类2
 */
class Implement2 extends Handler {
    // 实施类2 处理方法
    @Override
    void approve(int info) {
        if (info < 15) {
            System.out.println("Implement2：实施中。。。"+info);
            return;
        }
        nextHandler.approve(info);
    }
}

/**
 * 实施类3
 */
class Implement3 extends Handler {
    // 实施类2 处理方法
    @Override
    void approve(int info) {
        if (info < 20) {
            System.out.println("Implement3：实施中。。。"+info);
            return;
        }
//        nextHandler.approve(info);//链尾不能添加，否则报错
    }
}



/**
 * 组员测试类
 */
public class Controller {
    public static void main(String[] args) {
        // 创建Implement1实施类
        Handler implement1 = new Implement1();
        // 创建Implement2实施类
        Handler implement2 = new Implement2();
        // 创建Implement3实施类
        Handler implement3 = new Implement3();
        // 为1实施类设置2实施类
        implement1.setNextHandler(implement2);
        // 为2实施类设置3实施类1
        implement2.setNextHandler(implement3);
        // 处理流程
        for (int i = 0; i < 20; i++) {
            implement1.approve(i);
        }
    }
}